//
//  EZTallyAutoPtr.h
//  zhaitu
//
//  Created by ellzu on 13-8-4.
//  Copyright (c) 2013年 ellzu. All rights reserved.
//

#ifndef __zhaitu__EZTallyAutoPtr__
#define __zhaitu__EZTallyAutoPtr__

#include <iostream>
#include "EZTallyObject.h"

namespace EZTally {
    
    class EZTallyAutoPtr : public EZTallyObject
    {
    private:
        EZTallyObject *object;
        void CopyOther(const EZTallyAutoPtr &other);
    protected:
    public:
        EZTallyAutoPtr();
        EZTallyAutoPtr(const EZTallyAutoPtr &other);
        EZTallyAutoPtr &operator=(const EZTallyAutoPtr &other);
        virtual ~EZTallyAutoPtr();
        
        virtual EZTallyObject *Get();
        virtual void Set(EZTallyObject *obj,bool willRetain = true);
        void Clear();
    };
    
    template<class T>
    class EZTallyTemplateAutoPtr : public EZTallyAutoPtr
    {
    public:
        EZTallyTemplateAutoPtr(){}
        ~EZTallyTemplateAutoPtr(){}
        
        T Get(){
            return (T)(EZTallyAutoPtr::Get());
        };
    };

}

#endif /* defined(__zhaitu__EZTallyAutoPtr__) */
